//package com.peach.inquiry.imsdk.rtc;
//
//import android.Manifest;
//import android.app.Activity;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.google.gson.Gson;
//import com.glhz.doctor.inquirysdk.base.BaseEntity;
//import com.glhz.doctor.inquirysdk.bean.InquiryResult;
//import com.glhz.doctor.inquirysdk.bean.InquiryResultBean;
//import com.glhz.doctor.inquirysdk.bean.MedicineResponseBean;
//import com.glhz.doctor.inquirysdk.bean.ResponseTimeBean;
//import com.glhz.doctor.inquirysdk.bean.TIMBusinessType;
//import com.glhz.doctor.inquirysdk.component.TRTCLocalView;
//import com.glhz.doctor.inquirysdk.component.TRTCRemoteView;
//import com.glhz.doctor.inquirysdk.constant.Constants;
//import com.glhz.doctor.inquirysdk.http.RetrofitManager;
//import com.glhz.doctor.inquirysdk.inf.ITRTCNotify;
//import com.glhz.doctor.inquirysdk.manager.TRTCCloudListenerImpl;
//import com.glhz.doctor.inquirysdk.utils.MD5Util;
//import com.glhz.doctor.utils.CheckPermissionUtil;
//import com.glhz.doctor.utils.Logger;
//import com.glhz.doctor.utils.SharedPreferenceUtil;
//import com.taobao.weex.annotation.JSMethod;
//import com.taobao.weex.bridge.JSCallback;
//import com.taobao.weex.common.WXModule;
//import com.tencent.imsdk.TIMManager;
//import com.tencent.rtmp.ui.TXCloudVideoView;
//
//import java.util.Arrays;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import okhttp3.MediaType;
//import okhttp3.RequestBody;
//import retrofit2.Call;
//import retrofit2.Callback;
//import retrofit2.Response;
//
///**
// * 腾讯实时音视频Module
// *
// * @author Baohexin
// * @date 2019/09/09
// */
//public class TRTCModule extends WXModule implements ITRTCNotify {
//
//    private final static String TAG = TRTCModule.class.getSimpleName();
//
//    private TRTCCloudListenerImpl trtcCloudListener;
//
//    private JSCallback trtcCallbacks;
//
//    List<String> permissions = Arrays.asList(
//            Manifest.permission.CAMERA,
//            Manifest.permission.RECORD_AUDIO
////            Manifest.permission.MODIFY_AUDIO_SETTINGS
//    );
//
//    private String localRefer;
//    private String remoteRefer;
//
//    /**
//     * 进房间操作之前必须先初始化
//     */
//    @JSMethod(uiThread = true)
//    public void initRTC(int type, String json, String localRefer, String remoteRefer, JSCallback callbacks) {
//        this.trtcCallbacks = callbacks;
//        this.localRefer = localRefer;
//        this.remoteRefer = remoteRefer;
//        boolean permission = CheckPermissionUtil.permissionsCheck((Activity) mWXSDKInstance.getContext(), permissions, 32001);
//        // 创建问诊记录
//        if (type == TIMBusinessType.HOUSHI.getIndex()) {
//            createInquiry(json); // 风湿
//        } else if(type == TIMBusinessType.INQUIRY.getIndex()) {
//            createInquiry(json); // 问诊
//        } else if(type == TIMBusinessType.MEDICINE.getIndex()) {
//            createMedicineInquiry(json); // 云药房
//        }
////        if (permission) {
//            TRTCLocalView localView = (TRTCLocalView) findComponent(this.localRefer);
//            TRTCRemoteView remoteView = (TRTCRemoteView) findComponent(this.remoteRefer);
//            trtcCloudListener = new TRTCCloudListenerImpl(remoteView.getHostView(), localView.getHostView(), (ITRTCNotify) this);
////        }
//        JSONObject jsonObject = new JSONObject();
//        // type == -1只进行初始化
//        if (type == -1) {
//            jsonObject.put("type", "init");
//            jsonObject.put("content", "success");
//            trtcCallbacks.invokeAndKeepAlive(jsonObject);
//        }
//    }
//
//    /**
//     * 进入房间，通过callback回调
//     */
//    @JSMethod(uiThread = false)
//    public void enterRoom(JSONObject jsonObject) {
//        TRTCCloudListenerImpl trtcCloudListener = this.trtcCloudListener;
//        trtcCloudListener.enterRoom(
//                jsonObject.getString("userId"),  // 用户名
//                jsonObject.getString("userSign"), // userSign
//                jsonObject.getIntValue("appId"), // appId
//                jsonObject.getIntValue("roomId") // 房间号
//        );
//        Logger.i(TAG, "进入房间:" +
//                "userId:" + jsonObject.getString("userId") +
//                " userSign:" + jsonObject.getString("userSign") +
//                " appId:" + jsonObject.getIntValue("appId") +
//                " roomId:" + jsonObject.getIntValue("roomId")
//        );
////        // 修改问诊状态为已接诊（状态码为1）
////        updateInquiryType(json);
//    }
//
//    @JSMethod(uiThread = true)
//    public void jump() {
//
//    }
//
//    @JSMethod(uiThread = false)
//    public void exitRoom() {
//        TRTCCloudListenerImpl trtcCloudListener = this.trtcCloudListener;
//        trtcCloudListener.exitRoom();
////        // 结束问诊
////        finishInquiry(json);
//    }
//
//    @Override
//    public void onError(String errStr) {
//        JSONObject json = new JSONObject();
//        json.put("type", "rtcError");
//        json.put("content", errStr);
//        trtcCallbacks.invokeAndKeepAlive(json);
//    }
//
//    @Override
//    public void onEnterRoom(Long periodTime) {
//        JSONObject json = new JSONObject();
//        json.put("type", "enterRoom");
//        Logger.i(TAG, "进入房间onEnterRoom:" + json);
//        trtcCallbacks.invokeAndKeepAlive(json);
//    }
//
//    @Override
//    public void onExitRoom() {
//        JSONObject json = new JSONObject();
//        json.put("type", "exitRoom");
//        Logger.i(TAG, "退出房间onExitRoom:" + json);
//        trtcCallbacks.invokeAndKeepAlive(json);
//    }
//
//    @Override
//    public void onUserEnterRoom(String userName) {
//        JSONObject json = new JSONObject();
//        json.put("type", "userEnterRoom");
//        json.put("content", userName);
//        Logger.i(TAG, "有人进入房间onUserEnterRoom:" + json);
//        trtcCallbacks.invokeAndKeepAlive(json);
//    }
//
//    @Override
//    public void onUserExitRoom(String userName) {
//        JSONObject json = new JSONObject();
//        json.put("type", "userExitRoom");
//        Logger.i(TAG, "有人退出房间onUserEnterRoom:" + json);
//        trtcCallbacks.invokeAndKeepAlive(json);
//    }
//
//    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
//        JSONObject jsonObject = new JSONObject();
//        boolean isGranted = true; // 授权是否成功
////        for (int i = 0; i < grantResults.length; i++) {
////            if (permissions.length != 0 && grantResults[i] != PackageManager.PERMISSION_GRANTED) { // 失败
////                isGranted = false;
////            }
////        }
//        if (isGranted) {
//            jsonObject.put("type", "init");
//            jsonObject.put("content", "success");
//            Logger.i(TAG, "授权成功:" + jsonObject);
//            TRTCLocalView localView = (TRTCLocalView) findComponent(this.localRefer);
//            TRTCRemoteView remoteView = (TRTCRemoteView) findComponent(this.remoteRefer);
//            this.trtcCloudListener = new TRTCCloudListenerImpl((TXCloudVideoView) remoteView.getHostView(), (TXCloudVideoView) localView.getHostView(), (ITRTCNotify) this);
//            trtcCallbacks.invokeAndKeepAlive(jsonObject);
//        } else {
//            jsonObject.put("type", "init");
//            jsonObject.put("content", "error");
//            Logger.i(TAG, "授权失败:" + jsonObject);
//            trtcCallbacks.invokeAndKeepAlive(jsonObject);
//        }
//        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//    }
//
//    /**
//     * 云药房创建问诊记录
//     */
//    public void createMedicineInquiry(String json) {
//        JSONObject jsonObject = new JSONObject();
//        StringBuilder builder = new StringBuilder();
//        StringBuilder append = builder.append(Constants.ACCESSKEY).append(Constants.SECRETKEY);
//        String sign = MD5Util.MD5(append.toString());
//        RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
//        Call<BaseEntity<MedicineResponseBean>> call = RetrofitManager
//                .getInstance()
//                .apiService()
//                .createMedicineInquiry(body, Constants.ACCESSKEY, sign);
//        call.enqueue(new Callback<BaseEntity<MedicineResponseBean>>() {
//            @Override
//            public void onResponse(Call<BaseEntity<MedicineResponseBean>> call, Response<BaseEntity<MedicineResponseBean>> response) {
//                BaseEntity<MedicineResponseBean> body = response.body();
//                if (body != null && body.getCode() == 0 && body.getData() != null) {
//                    String inquiryId = body.getData().getInquiryId();
//                    String clientUserId = body.getData().getClientUserId();
//                    String medicineInfo = body.getData().getMedicineInfo();
//                    String clientId = body.getData().getClientId();
//                    String bizId = body.getData().getBizId();
//                    String serverId = body.getData().getServerId();
//                    Logger.i("bhx", "inquiryId===" + inquiryId + " clientUserId===" + clientUserId);
//
//                    jsonObject.put("type", "init");
//                    jsonObject.put("content", "success");
//                    jsonObject.put("inquiryId", inquiryId);
//                    jsonObject.put("clientUserId", clientUserId);
//                    jsonObject.put("medicineInfo", medicineInfo);
//                    jsonObject.put("clientId", clientId);
//                    jsonObject.put("bizId", bizId);
//                    jsonObject.put("serverId", serverId);
//                    jsonObject.put("code", body.getCode());
//
//                    Logger.i("bhx", "jsonObject===" + jsonObject);
//                    trtcCallbacks.invokeAndKeepAlive(jsonObject);
//                } else {
//                    jsonObject.put("code", 1);
//                    trtcCallbacks.invokeAndKeepAlive(jsonObject);
//                }
//            }
//
//            @Override
//            public void onFailure(Call<BaseEntity<MedicineResponseBean>> call, Throwable t) {
//                Logger.e("bhx", t.getMessage().toString());
//                jsonObject.put("code", 1);
//                trtcCallbacks.invokeAndKeepAlive(jsonObject);
//            }
//        });
//    }
//
//    /**
//     * 创建问诊记录
//     *
//     * @param json 请求数据
//     */
//    public void createInquiry(String json) {
//        JSONObject jsonObject = new JSONObject();
//        StringBuilder builder = new StringBuilder();
//        StringBuilder append = builder.append(Constants.ACCESSKEY).append(Constants.SECRETKEY);
//        String sign = MD5Util.MD5(append.toString());
//        RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
//        Call<BaseEntity<InquiryResultBean>> call = RetrofitManager
//                .getInstance()
//                .apiService()
//                .createInquiry(body, Constants.ACCESSKEY, sign);
//        call.enqueue(new Callback<BaseEntity<InquiryResultBean>>() {
//            @Override
//            public void onResponse(Call<BaseEntity<InquiryResultBean>> call, Response<BaseEntity<InquiryResultBean>> response) {
//                BaseEntity<InquiryResultBean> body = response.body();
//                if (body != null && body.getCode() == 0 && body.getData() != null) {
//                    String inquiryId = body.getData().getInquiryId();
//                    jsonObject.put("type", "init");
//                    jsonObject.put("content", "success");
//                    jsonObject.put("inquiryId", inquiryId);
//                    jsonObject.put("code", body.getCode());
//                    trtcCallbacks.invokeAndKeepAlive(jsonObject);
//                } else {
//                    jsonObject.put("code", 1);
//                    trtcCallbacks.invokeAndKeepAlive(jsonObject);
//                }
//
//            }
//
//            @Override
//            public void onFailure(Call<BaseEntity<InquiryResultBean>> call, Throwable t) {
//                Logger.e("bhx", t.getMessage().toString());
//                jsonObject.put("code", 1);
//                trtcCallbacks.invokeAndKeepAlive(jsonObject);
//            }
//        });
//    }
//
//    /**
//     * 刷新处方问诊记录
//     */
//    @JSMethod(uiThread = false)
//    public void refreshRPInquiry(String json, JSCallback callback) {
//        JSONObject jsonObject = new JSONObject();
//        StringBuilder builder = new StringBuilder();
//        StringBuilder append = builder.append(Constants.ACCESSKEY).append(Constants.SECRETKEY);
//        String sign = MD5Util.MD5(append.toString());
//        RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
//        Call<BaseEntity<InquiryResultBean>> call = RetrofitManager
//                .getInstance()
//                .apiService()
//                .refreshInquiry(body, Constants.ACCESSKEY, sign);
//        call.enqueue(new Callback<BaseEntity<InquiryResultBean>>() {
//            @Override
//            public void onResponse(Call<BaseEntity<InquiryResultBean>> call, Response<BaseEntity<InquiryResultBean>> response) {
//                BaseEntity<InquiryResultBean> body = response.body();
//                if (body != null && body.getCode() == 0 && body.getData() != null) {
//                    String inquiryId = body.getData().getInquiryId();
//                    SharedPreferenceUtil.put(mWXSDKInstance.getContext(),
//                            TIMManager.getInstance().getLoginUser() + "doctor_inquiryId",inquiryId);
//                    jsonObject.put("inquiryId", inquiryId);
//                    jsonObject.put("code", body.getCode());
//                    callback.invokeAndKeepAlive(jsonObject);
//                } else {
//                    jsonObject.put("code", 1);
//                    callback.invokeAndKeepAlive(jsonObject);
//                }
//            }
//
//            @Override
//            public void onFailure(Call<BaseEntity<InquiryResultBean>> call, Throwable t) {
//                Logger.e("bhx", t.getMessage().toString());
//                jsonObject.put("code", 1);
//                callback.invokeAndKeepAlive(jsonObject);
//            }
//        });
//    }
//
//    /**
//     * 处方（辩证开方）创建问诊记录
//     */
//    @JSMethod(uiThread = false)
//    public void createRPInquiry(String json,JSCallback callback) {
//        JSONObject jsonObject = new JSONObject();
//        StringBuilder builder = new StringBuilder();
//        StringBuilder append = builder.append(Constants.ACCESSKEY).append(Constants.SECRETKEY);
//        String sign = MD5Util.MD5(append.toString());
//        RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
//        Call<BaseEntity<InquiryResultBean>> call = RetrofitManager
//                .getInstance()
//                .apiService()
//                .createRPInquiry(body, Constants.ACCESSKEY, sign);
//        call.enqueue(new Callback<BaseEntity<InquiryResultBean>>() {
//            @Override
//            public void onResponse(Call<BaseEntity<InquiryResultBean>> call, Response<BaseEntity<InquiryResultBean>> response) {
//                BaseEntity<InquiryResultBean> body = response.body();
//                if (body != null && body.getCode() == 0 && body.getData() != null) {
//                    String inquiryId = body.getData().getInquiryId();
//                    SharedPreferenceUtil.put(mWXSDKInstance.getContext(),
//                            TIMManager.getInstance().getLoginUser() + "doctor_inquiryId", inquiryId);
//                    jsonObject.put("inquiryId", inquiryId);
//                    jsonObject.put("code", body.getCode());
//                    callback.invokeAndKeepAlive(jsonObject);
//                } else {
//                    jsonObject.put("code", 1);
//                    callback.invokeAndKeepAlive(jsonObject);
//                }
//
//            }
//
//            @Override
//            public void onFailure(Call<BaseEntity<InquiryResultBean>> call, Throwable t) {
//                Logger.e("bhx", t.getMessage().toString());
//                jsonObject.put("code", 1);
//                callback.invokeAndKeepAlive(jsonObject);
//            }
//        });
//    }
//
//    /**
//     * 获取图文问诊和视频问诊 inquiryId
//     * @param callback
//     */
//    @JSMethod(uiThread = false)
//    public void getRpInquiryID(JSCallback callback) {
//        String inquiryId = (String)SharedPreferenceUtil.get(mWXSDKInstance.getContext(),
//                TIMManager.getInstance().getLoginUser() + "doctor_inquiryId", "");
//        callback.invokeAndKeepAlive(inquiryId);
//    }
//
//    /**
//     * 修改问诊状态
//     *
//     * @param json 请求数据
//     *             {
//     *             "keyID":"19101215340641728361325001",
//     *             "inquiryType":1,
//     *             "clientUserID":"19100819142880742770528001",
//     *             "doctorID":"19101016090365606670514001"
//     *             }
//     */
//    @JSMethod(uiThread = false)
//    public void updateInquiryType(String json) {
//        Map<String, Object> map = new HashMap<>();
//        StringBuilder builder = new StringBuilder();
//        StringBuilder append = builder.append(Constants.ACCESSKEY).append(Constants.SECRETKEY);
//        String sign = MD5Util.MD5(append.toString());
////        InquiryStatusBean inquiryStatusBean = JSON.parseObject(json, InquiryStatusBean.class);
//        RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
//        Call<InquiryResult> call = RetrofitManager
//                .getInstance()
//                .apiService()
//                .updateInquiryStatus(body, Constants.ACCESSKEY, sign);
//        call.enqueue(new Callback<InquiryResult>() {
//            @Override
//            public void onResponse(Call<InquiryResult> call, Response<InquiryResult> response) {
//                if (response.body() != null && response.body().getCode() == 0) {
//                    InquiryResult body = response.body();
//                    int code = body.getCode();
//                    String message = body.getMessage();
//                    map.put("code", code);
//                    map.put("message", message);
//                    Logger.i(TAG, "修改成功");
//                } else {
//                    map.put("code", 1);
//                }
//            }
//
//            @Override
//            public void onFailure(Call<InquiryResult> call, Throwable t) {
//                Map<String, Object> map = new HashMap<>();
//                map.put("code", 1);
//                map.put("message", "修改失败");
//                Logger.e("bhx", "修改失败");
//            }
//        });
//    }
//
//    /**
//     * 修改响应时间
//     *
//     * @param json 请求数据
//     *             {
//     *             "keyID" : "123123123123123"
//     *             }
//     */
//    @JSMethod
//    public void updateInquiryResponse(String json) {
//        StringBuilder builder = new StringBuilder();
//        StringBuilder append = builder.append(Constants.ACCESSKEY).append(Constants.SECRETKEY);
//        String sign = MD5Util.MD5(append.toString());
//        ResponseTimeBean responseTimeBean = JSON.parseObject(json, ResponseTimeBean.class);
//        RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), new Gson().toJson(responseTimeBean));
//        Call<InquiryResult> call = RetrofitManager
//                .getInstance()
//                .apiService()
//                .updateResponseTime(body, Constants.ACCESSKEY, sign);
//        call.enqueue(new Callback<InquiryResult>() {
//            @Override
//            public void onResponse(Call<InquiryResult> call, Response<InquiryResult> response) {
//                if (response.body() != null) {
//                    InquiryResult body = response.body();
//                    int code = body.getCode();
//                    String message = body.getMessage();
//                    Map<String, Object> map = new HashMap<>();
//                    map.put("code", code);
//                    map.put("message", message);
//                }
//            }
//
//            @Override
//            public void onFailure(Call<InquiryResult> call, Throwable t) {
//                Map<String, Object> map = new HashMap<>();
//                map.put("code", 1);
//                map.put("message", "失败");
//            }
//        });
//    }
//
//    /**
//     * 结束问诊
//     *
//     * @param json 请求数据
//     *             {
//     *             "keyID":"19101215340641728361325001",
//     *             "clientUserID":"19100819142880742770528001",
//     *             "doctorID":"19101016090365606670514001"
//     *             }
//     */
//    @JSMethod
//    public void finishInquiry(String json) {
//        Map<String, Object> map = new HashMap<>();
//        StringBuilder builder = new StringBuilder();
//        StringBuilder append = builder.append(Constants.ACCESSKEY).append(Constants.SECRETKEY);
//        String sign = MD5Util.MD5(append.toString());
////        FinishInquiryBean finishInquiryBean = JSON.parseObject(json, FinishInquiryBean.class);
//        RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),json);
//        Call<InquiryResult> call = RetrofitManager
//                .getInstance()
//                .apiService()
//                .endInquiry(body, Constants.ACCESSKEY, sign);
//        call.enqueue(new Callback<InquiryResult>() {
//            @Override
//            public void onResponse(Call<InquiryResult> call, Response<InquiryResult> response) {
//                if (response.body() != null && response.body().getCode() == 0) {
//                    InquiryResult body = response.body();
//                    int code = body.getCode();
//                    String message = body.getMessage();
//                    map.put("code", code);
//                    map.put("message", message);
//                } else {
//                    map.put("code", 1);
//                }
//            }
//
//            @Override
//            public void onFailure(Call<InquiryResult> call, Throwable t) {
//                Map<String, Object> map = new HashMap<>();
//                map.put("code", 1);
//                map.put("message", "失败");
//            }
//        });
//    }
//
//    @JSMethod
//    public void backPress() {
//
//    }
//
//
//
//}